#include "srkrtDynamicList.h"
/* ---------------------------------------
	Declaration des fonctions 
--------------------------------------- */

void list_create(List* l) {
       l->head = NULL;
}

bool list_is_empty(List *l) {
       return(l->head == NULL);
}

void list_add(List *l, Move m) {
       Cel *new = NULL;
              
       /* création de la nouvelle cellule */
       new = malloc(sizeof(Cel));
       
       if ( new == NULL ) {
	       fprintf(stderr, "Erreur creation de la liste\n");
       } else {
		/* on lie la nouvelle cellule au reste de la pile */
		new->next = l->head;  

		/* on affecte l'élément */
		new->value = m ;

		/* on lie la Pile à la nouvelle cellule */
		l->head = new;
		
       }

}

/* Utiliser pointeur de fonction pour supprimer la liste ( free sur toutes les cellules ) et chercher !! 
voir cour de prog !!! Les deux fonctions doivent avoir la meme signature?? */

bool apply_function_to_list(bool (*f)(List*, Cel*, Move), List *list, Move m) {
	Cel* current;
	bool end = false;
	current = list->head;
	
	while ( (current != NULL) && !end ) {
		/* on applique la fonction à la Cel */
		if ( f(list, current, m) ) { /* si on a trouvé on s'arrète */
			end = true;
		}
		/* on passe à la Cel suivante */
		current = current->next;
	}
	return(end);
}

bool p_is_present(List* l, Cel *cel, Move m) {
	/*return(cel.value == m);*/
	return(true);
}

bool p_list_remove(List* l, Cel *cel, Move m) {
	/* on supprime la cellule */
	free(cel);

	return(false);
}


void list_remove(List* l) {
	Move m;
	apply_function_to_list(&p_list_remove, l, m);
}

